题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路
- 首先没了上面那些关键字你会发现,你不能循环了,所以你得想办法循环,书上给的是构造函数,但是java默认构造函数不初始化,除非你手动,所以说就不行了
- 没有if,你会发现递归的条件不能控制了,和for,while一样,其实我们失去的就是控制边界;那么想法就是如何让程序顺利退出;
3.下面说三种方法,异常,&&短路运算符,次方运算
1 2 3 4 5 6 7 8 9 10
| static public int Sum_Solution1(int n) { try { int i=1%n; return n+Sum_Solution(n-1); }catch (Exception e) { return 0; } }
|
1 2 3 4 5 6
| //短路运算符,先算前面 static public int Sum_Solution(int n){ int i = n; boolean flag = (n>0) && (n+=Sum_Solution(n-1))>0; return n; }
|
1 2 3 4 5
| //这个其实是公式(n*(n+1)/2)==(n*n+n)/2;不过左移运算符本来就是除法,所以。。。。。 static public int Sum_Solution2(int n) { return (int)(Math.pow(n,2)+n)>>1; }
|
收获
- 眼界大开啊,各种奇怪的想法;